using UnityEngine;
using QFramework;
using QAssetBundle;
using QFramework.Example;

namespace ProjectSurvivor
{
	public partial class Ball : ViewController
	{
		void Start()
		{
			SelfRigidbody2D.velocity=
			            //随机方向
			new Vector2(Random.Range(-1.0f,1.0f),
			//随机速度
			Random.Range(-1.0f,1.0f))*Random.Range(Global.BasketBallSpeed.Value-2,Global.BasketBallSpeed.Value+2);
			//超级篮球
			Global.SuperBasketBall.RegisterWithInitValue(unlocked=>
			{
				if(unlocked)
				{
					//用于设置或获取游戏对象的局部缩放值
					this.LocalScale(3);
				}
			});
			//触发器碰撞
			HurtBox.OnTriggerEnter2DEvent(collider =>
			{
				//获取碰撞组件
				var hurtBox = collider.GetComponent<HitHurtBox>();
				if (hurtBox)
				{
					if (hurtBox.Owner.CompareTag("Enemy"))
					{
						//获取敌人组件
						var enemy = hurtBox.Owner.GetComponent<IEnemy>();
						//是否是超级武器是并随机伤害倍数
						var damageTimes=Global.SuperBasketBall.Value?Random.Range(2,4):1;
						//计算伤害
						DamageSystem.CalculateDamage(Global.BasketBallDamage.Value*damageTimes,enemy);						
						//如果随机数小于0.5，并且碰撞器存在，碰撞器刚体存在，玩家存在  
						//attachedRigidbody返回附加到该碰撞器所在游戏对象上的 Rigidbody2D 组件
						if (Random.Range(0, 1f) < 0.5f && collider && collider.attachedRigidbody &&
						    Player.Default)
						{
							//velocity 是速度向量，包含大小和方向 是V2类型
							collider.attachedRigidbody.velocity =
								//计算二维方向向量的方法，它返回一个标准化的（长度为1）方向向量。计算的是从 this 指向 collider 的方向
								collider.NormalizedDirection2DFrom(this) * 5 +
								//玩家方向的分量更大（10 > 5），所以球体会主要朝向玩家移动
								collider.NormalizedDirection2DFrom(Player.Default) * 10;
								//来自球体的推力（5单位）
								//朝向玩家的拉力（10单位）
						}
					}
				}
			}).UnRegisterWhenGameObjectDestroyed(gameObject);
		}
        void OnCollisionEnter2D(Collision2D collision)
        {
			//获取碰撞法线  collision.GetContact(0) 获取碰撞的第一个接触点  normal 是接触点的法线向量
			//法线向量：
	// normal 是接触点的法线向量
	// 法线向量垂直于碰撞表面
	// 方向从碰撞表面指向外部
	// 是一个单位向量（长度为1）
            var normal=collision.GetContact(0).normal;
			//碰撞方向判断：
// 通过比较法线向量的 x 和 y 分量来判断碰撞方向
// 如果 normal.x > normal.y，说明是水平碰撞
// 如果 normal.x <= normal.y，说明是垂直碰撞
			if(normal.x>normal.y)
			{
				//SelfRigidbody2D.velocity.x 保持原来的水平速度不变这确保了球在水平方向上的运动不受影响
				SelfRigidbody2D.velocity=new Vector2(SelfRigidbody2D.velocity.x,
				//Mathf.Sign(SelfRigidbody2D.velocity.y) 获取垂直速度的方向
				Mathf.Sign(SelfRigidbody2D.velocity.y)*Random.Range(0.5f,1.5f)
				//随机篮球速度
				*Random.Range(Global.BasketBallSpeed.Value-2,Global.BasketBallSpeed.Value+2));
				//随机角度
				SelfRigidbody2D.angularVelocity=Random.Range(-360,360);
			}
			else
			{
				//获取刚体
				var rb=SelfRigidbody2D;
				//设置速度
				rb.velocity=
				new Vector2(Mathf.Sign(rb.velocity.x)*Random.Range(0.5f,1.5f)*Random.Range(
					Global.BasketBallSpeed.Value-2,Global.BasketBallSpeed.Value+2),rb.velocity.y);
				//随机角度
				rb.angularVelocity=Random.Range(-360f,360f);
			}
			//播放声音
			AudioKit.PlaySound(Sfx.BALL);
        }
    }
}
